package com.jyw.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jyw.common.utils.DateUtils;
import com.jyw.system.domain.SysFormConfig;
import com.jyw.system.domain.SysFormConfigColumn;
import com.jyw.system.domain.vo.SysFormConfigVo;
import com.jyw.system.domain.vo.SysFormMenuVo;
import com.jyw.system.mapper.SysFormConfigMapper;
import com.jyw.system.service.ISysFormConfigColumnService;
import com.jyw.system.service.ISysFormConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 系统表单配置Service业务层处理
 *
 * @author ZhangCheng
 * @date 2023-08-10
 */
@Service
public class SysFormConfigServiceImpl extends ServiceImpl<SysFormConfigMapper, SysFormConfig> implements ISysFormConfigService {
    @Resource
    private SysFormConfigMapper sysFormConfigMapper;

    @Autowired
    private ISysFormConfigColumnService sysFormConfigColumnService;

    @Override
    public List<SysFormMenuVo> queryMenuList() {
        return sysFormConfigMapper.queryMenuList();
    }

    /**
     * 查询系统表单配置
     *
     * @param id 系统表单配置主键
     * @return 系统表单配置
     */
    @Override
    public SysFormConfig selectSysFormConfigById(Long id) {
        return sysFormConfigMapper.selectSysFormConfigById(id);
    }

    /**
     * 查询系统表单配置列表
     *
     * @param sysFormConfig 系统表单配置
     * @return 系统表单配置
     */
    @Override
    public List<SysFormConfig> selectSysFormConfigList(SysFormConfig sysFormConfig) {
        return sysFormConfigMapper.selectSysFormConfigList(sysFormConfig);
    }

    @Override
    public List<SysFormConfig> queryAllList() {
        return sysFormConfigMapper.queryAllList();
    }

    @Override
    public List<SysFormConfigVo> queryListByMenuId(Long menuId) {
        if (menuId != null) {
            QueryWrapper<SysFormConfig> queryWrapper = new QueryWrapper<>();
            queryWrapper.lambda().eq(SysFormConfig::getMenuId, menuId);
            List<SysFormConfig> list = this.list(queryWrapper);
            if (CollectionUtil.isNotEmpty(list)) {
                List<SysFormConfigVo> configVos = new ArrayList<>();
                list.forEach(config -> {
                    SysFormConfigVo sysFormConfigVo = BeanUtil.copyProperties(config, SysFormConfigVo.class);
                    if (config.getId() != null) {
                        List<SysFormConfigColumn> columns = sysFormConfigColumnService.selectByFormId(config.getId());
                        sysFormConfigVo.setColumns(columns);
                    }
                    configVos.add(sysFormConfigVo);
                });
                return configVos;
            }
        }
        return null;
    }

    /**
     * 新增系统表单配置
     *
     * @param sysFormConfig 系统表单配置
     * @return 结果
     */
    @Override
    public int insertSysFormConfig(SysFormConfig sysFormConfig) {
        sysFormConfig.setCreateTime(DateUtils.getNowDate());
        return sysFormConfigMapper.insert(sysFormConfig);
    }

    /**
     * 修改系统表单配置
     *
     * @param sysFormConfig 系统表单配置
     * @return 结果
     */
    @Override
    public int updateSysFormConfig(SysFormConfig sysFormConfig) {
        sysFormConfig.setUpdateTime(DateUtils.getNowDate());
        return sysFormConfigMapper.updateSysFormConfig(sysFormConfig);
    }

    /**
     * 批量删除系统表单配置
     *
     * @param ids 需要删除的系统表单配置主键
     * @return 结果
     */
    @Override
    public int deleteSysFormConfigByIds(Long[] ids) {
        return sysFormConfigMapper.deleteSysFormConfigByIds(ids);
    }

    /**
     * 删除系统表单配置信息
     *
     * @param id 系统表单配置主键
     * @return 结果
     */
    @Override
    public int deleteSysFormConfigById(Long id) {
        return sysFormConfigMapper.deleteSysFormConfigById(id);
    }
}
